#pragma once
/***********************************************************************************************
COPYRIGHT 2011 Mafahir Fairoze

This file is part of Neural++.
(Project Website : http://mafahir.wordpress.com/projects/neuralplusplus)

Neural++ is a free software. You can redistribute it and/or modify it under the terms of
the GNU General Public License as published by the Free Software Foundation, either version 3
of the License, or (at your option) any later version.

Neural++ is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License <http://www.gnu.org/licenses/> for more details.

***********************************************************************************************/

#include <vector>
#include "ISynapse.h"


namespace NeuralPlusPlus
	{
	namespace Core        
		{
		class ISynapse;
		class Layer;
		/// <summary>
		/// Interface representing a neuron. A neuron is a basic building block of a neural network.
		/// </summary>
		class INeuron abstract
			{

			public: double Input;

			public: double Output;

			public: std::vector<ISynapse*> SourceSynapses;

			public: std::vector<ISynapse*> TargetSynapses;

			public: Layer *Parent;

			public: void virtual Run() = 0;

			public: void virtual Learn(double learningRate) = 0;

			};
		}

	}